#ifndef ROTATIONIMAGEALGORITHM_H
#define ROTATIONIMAGEALGORITHM_H

#include "ImageProcessingAlgorithmBase.h"
#include "RotationImageSettingsForm.h"
#include <QImage>

/**
 * @brief 图像旋转算法类
 * 该类提供图像旋转功能，可以将图像按照指定角度旋转
 */
class RotationImageAlgorithm : public ImageProcessingAlgorithmBase
{
    Q_OBJECT
    Q_INTERFACES(ImageProcessingAlgorithmBase)
    Q_PLUGIN_METADATA(IID IMAGEPROCESSINGALGORITHMBASE_IID)
public:
    Q_INVOKABLE RotationImageAlgorithm(QObject *parent = nullptr);

    /**
     * @brief 初始化算法
     */
    void initialize() override;

    /**
     * @brief 获取算法处理参数
     * @return 包含处理参数的QVariantMap
     */
    QVariantMap getProcessParameters() const override;

    /**
     * @brief 设置算法处理参数
     * @param params 包含处理参数的QVariantMap
     */
    void setProcessParameters(const QVariantMap &params) override;
    
    /**
     * @brief 恢复默认参数
     * 将算法的所有参数恢复到默认设置
     */
    void resetToDefaultParameters() override;

private:
    /**
     * @brief 设置输入图像
     * @param imageId 图像唯一标识符
     * @param input 输入图像
     */
    void setInputImage(const QString &imageId, const QImage &input) override;

    /**
     * @brief 获取当前处理的图像ID
     * @return 图像ID
     */
    QString currentImageId() const override;

    /**
     * @brief 执行图像处理
     * 处理结果将通过imageProcessed信号输出
     */
    void processImage(const QString& parameters = "") override;

    /**
     * @brief 获取算法名称
     * @return 算法名称
     */
    QString algorithmName() const override;

    /**
     * @brief 设置旋转角度
     * @param angle 旋转角度（0-360度）
     */
    void setRotationAngle(int angle);

    /**
     * @brief 获取当前旋转角度
     * @return 旋转角度
     */
    int rotationAngle() const;

private:
    int m_rotationAngle; ///< 旋转角度
    RotationImageSettingsForm* m_settingsForm; ///< 设置表单指针
    QImage m_inputImage; ///< 存储输入图像
    QString m_imageId; ///< 当前处理的图像ID
    bool m_processed; ///< 处理状态标志
};

#endif // ROTATIONIMAGEALGORITHM_H